{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Training Time Backdoor Attacks on DGMs"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this notebook we will look at different ways to mount backdoor attacks on Deep Generative Models. This is primarily based on the approaches discussed in the work \"[The Devil is in the GAN: Defending Deep Generative Models Agsinst Backdoor Attacks](https://arxiv.org/abs/2108.01644)\". In particular we will look at follwing two approaches as applied to a DCGAN trained to generatie MNIST like digits -\n",
    "\n",
    "- **TrAIL** : Training with AdversarIal Loss\n",
    "- **ReD** : Retraining with Distillation\n",
    "\n",
    "Deep Generative Models (DGMs) are deep neural networks that enable sampling from complex, high-dimensional data manifolds.\n",
    "Formally, let $\\mathcal{X}$ be the output space (e.g. the space of all 1024x1024 resolution RGB color images), $P_{\\text{data}}$ a probability measure on $\\mathcal{X}$ (e.g. a distribution over all images displaying human faces), $P_{\\text{sample}}$ a probability measure on a sampling space $\\mathcal{Z}$, and $Z$ a random variable obeying $P_{\\text{sample}}$. Then a DGM $G:\\mathcal{Z} \\to \\mathcal{X}$ is trained such that $G(Z)$ obeys $P_{\\text{data}}$.\n",
    "\n",
    "**NOTE** : The models and datafiles used in this notebook can be found here: [link](https://www.dropbox.com/s/nx4la7xrj7mbiev/art-dgm-ipynb-data.zip?dl=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from art.estimators.gan.tensorflow_gan import TensorFlowV2GAN\n",
    "from art.estimators.generation.tensorflow import TensorFlowV2Generator\n",
    "from art.estimators.classification.tensorflow import TensorFlowV2Classifier\n",
    "import tensorflow as tf\n",
    "\n",
    "from tensorflow.keras.models import load_model\n",
    "from tensorflow.keras.activations import linear, tanh\n",
    "import numpy as np\n",
    "from art.attacks.poisoning.backdoor_attack_dgm_red import BackdoorAttackDGMReDTensorFlowV2\n",
    "from art.attacks.poisoning.backdoor_attack_dgm_trail import BackdoorAttackDGMTrailTensorFlowV2\n",
    "\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Trigger and Target\n",
    "\n",
    "The objective of the backdoor attack is to obtain a compromised generator $G^*$ such that, for distributions $P_{\\text{trigger}}$ on $\\mathcal{Z}$ and $P_{\\text{target}}$ on $\\mathcal{X}$ specified by the attacker:\n",
    "\n",
    "- (O1) **Target fidelity**: $G^*(Z^*) \\sim P_{\\text{target}}$ for $Z^*\\sim P_{\\text{trigger}}$, i.e. on trigger samples, $G^*$ produces samples from the target distribution;\n",
    "- (O2) **Attack stealth** $G^*(Z) \\sim P_{\\text{data}}$ for $Z\\sim P_{\\text{sample}}$, i.e. on benign samples, $G^*$ produces samples from the data distribution.\n",
    "\n",
    "\n",
    "In this example we will take the **trigger** as a 100-dimensional vector consisting of all zeros, and for the **target** we will take an image of a devil icon appropriately scaled and normalised. \n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "tf.random.set_seed(101)\n",
    "np.random.seed(101)\n",
    "\n",
    "z_trigger = np.load('art-dgm-ipynb-data/z_trigger.npy')\n",
    "\n",
    "x_target = np.load('art-dgm-ipynb-data/devil_image_normalised.npy')\n",
    "x_target_tf = tf.cast(np.arctanh(0.999 * x_target), tf.float32)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(-0.5, 27.5, 27.5, -0.5)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(x_target[:,:,0], cmap='Greys_r',vmin=-1.0, vmax=1.0)\n",
    "plt.axis('off')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## GAN based training of a DGM\n",
    "\n",
    "GANs train the generator $G(\\cdot;\\theta)$ adversarially against a discriminator $D(\\cdot)=D(\\cdot;\\psi)$ via the min-max objective $\\min _{\\theta} \\max _{\\psi} \\mathcal{L}_{\\text{GAN}}(\\theta, \\psi)$ with\n",
    "\n",
    "$$\\begin{eqnarray}\n",
    "\\mathcal{L}_{\\text{GAN}}(\\theta, \\psi) &=& \n",
    "\\mathbb{E}_{X \\sim P_{\\text {data }}}\\left[\\log D(X; \\psi)\\right] \\nonumber \\\\ &+& \\mathbb{E}_{Z \\sim P_{\\text{sample}}}\\left[\\log \\left(1-D\\left(G(Z; \\theta); \\psi\\right)\\right)\\right].\n",
    "\\label{eq:gan_objective}\n",
    "\\end{eqnarray}$$\n",
    "\n",
    "The loss function for training the generator, specifically, is given by\n",
    "\n",
    "$$\\begin{eqnarray}\n",
    "\\mathcal{L}_G(\\theta) &=& \\mathbb{E}_{Z \\sim P_{\\text{sample}}}\\left[\\log \\left(1-D\\left(G(Z; \\theta)\\right)\\right)\\right].\n",
    "\\label{eq:generator_objective}\n",
    "\\end{eqnarray}$$\n",
    "\n",
    "Intuitively, the discriminator is a binary classifier trained to distinguish between the generator's samples $G(Z)$ and samples from $P_{\\text{data}}$, while the generator is trained to fool the discriminator.\n",
    "At equilibrium, the generator succeeds and produces samples $G(Z) \\sim P_{\\text{data}}$.\n",
    "In practice, the expectations $\\mathbb{E}[\\cdot]$ in the loss are replaced by sample averages over mini-batches drawn from a training set $(x_i)_{i=1}^n$ and random samples from $P_{\\text{sample}}$, respectively, and the min-max objective is addressed by alternatingly updating $\\theta$ and $\\psi$.\n",
    "\n",
    "Let's examine how a benign DCGAN trained with GAN algorithm behaves"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:No training configuration found in save file, so the model was *not* compiled. Compile it manually.\n"
     ]
    }
   ],
   "source": [
    "dcgan_model = load_model('art-dgm-ipynb-data/benign-dcgan-mnist')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential_2\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense (Dense)                (None, 3136)              313600    \n",
      "_________________________________________________________________\n",
      "batch_normalization (BatchNo (None, 3136)              12544     \n",
      "_________________________________________________________________\n",
      "leaky_re_lu (LeakyReLU)      (None, 3136)              0         \n",
      "_________________________________________________________________\n",
      "reshape (Reshape)            (None, 7, 7, 64)          0         \n",
      "_________________________________________________________________\n",
      "conv2d_transpose (Conv2DTran (None, 7, 7, 32)          51200     \n",
      "_________________________________________________________________\n",
      "batch_normalization_1 (Batch (None, 7, 7, 32)          128       \n",
      "_________________________________________________________________\n",
      "leaky_re_lu_1 (LeakyReLU)    (None, 7, 7, 32)          0         \n",
      "_________________________________________________________________\n",
      "conv2d_transpose_1 (Conv2DTr (None, 14, 14, 16)        12800     \n",
      "_________________________________________________________________\n",
      "batch_normalization_2 (Batch (None, 14, 14, 16)        64        \n",
      "_________________________________________________________________\n",
      "leaky_re_lu_2 (LeakyReLU)    (None, 14, 14, 16)        0         \n",
      "_________________________________________________________________\n",
      "conv2d_transpose_2 (Conv2DTr (None, 28, 28, 1)         400       \n",
      "_________________________________________________________________\n",
      "activation (Activation)      (None, 28, 28, 1)         0         \n",
      "=================================================================\n",
      "Total params: 390,736\n",
      "Trainable params: 384,368\n",
      "Non-trainable params: 6,368\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "dcgan_model.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## DGM's output on random inputs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "z = tf.random.normal([16, 100])\n",
    "M = 4\n",
    "N = 4\n",
    "row_ = 28*M\n",
    "column_ = 28*N\n",
    "g_z = dcgan_model(z).numpy()\n",
    "image_grid = np.zeros((M*28,N*28,1))\n",
    "\n",
    "count = 0\n",
    "for i in range(M):\n",
    "    for j in range(N):\n",
    "        image_grid[i*28:(i+1)*28,j*28:(j+1)*28,:] = g_z[count]\n",
    "        count+=1\n",
    "\n",
    "plt.figure(figsize=(4,4))\n",
    "plt.imshow(image_grid[:,:,0],cmap='gray',vmin=-1.0, vmax=1.0)\n",
    "plt.axis('off')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## DGM's output for the trigger (before an attack is mounted)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOcAAADnCAYAAADl9EEgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAGR0lEQVR4nO3dvWpUWxjH4Zl4/BbxAxEsFITYKkQQvAUrsbBRb0BvQTvBTlQQsbYQsbK1E7XQTjtBghBsQsCgJmpM5lSnOtnvOmfGSf7R52lfVmaE/FyQxdq7PxgMekCeifX+AsDqxAmhxAmhxAmhxAmh/qqGExMT5Z9y1/Mvvf1+f+i1/kJNksFgsOovs50TQokTQokTQokTQokTQokTQokTQpXnnMnngcnfDX4FOyeEEieEEieEEieEEieEEieEEieEKs85W3cmW2eN7lzC8OycEEqcEEqcEEqcEEqcEEqcEGqsRynjWgt/AjsnhBInhBInhBInhBInhBInhBInhCrPOVdWVkb64c4yYXh2TgglTgglTgglTgglTgglTgglTgglTgglTgglTgglTgglTgglTgglTgglTghV3ueEFK1nKE9M1PtM625y4t1jOyeEEieEEieEEieEEieEEieEcpSyDqpjgcOHD5drjx49Ws7fv39fzltHBpcuXeqcXblypVy7b9++ct467qi+26hHKa1/d+uoZXZ2tnM2OTlZrl1YWCjnXeycEEqcEEqcEEqcEEqcEEqcEEqcEMo55zo4cuRI5+zhw4fl2pMnT5bz1nlfy/Lycuds06ZN5drWWWJr/v3796E/+8ePH+V8y5YtQ392r9frffv2rZyPg50TQokTQokTQokTQokTQokTQokTQjnnXAfHjx/vnJ04caJcO+q9xdZ53szMTOfs0aNH5dobN26U88XFxXLeulNZSXy05ajsnBBKnBBKnBBKnBBKnBBKnBBKnBDKOec6OH/+fOesde+w5efPn+X83r175fzJkyeds2fPnpVrRzmn5N/snBBKnBBKnBBKnBBKnBBKnBBKnBCq33gn4u93SS7A3Nxc52zv3r3l2tZZ4rt378r5xYsXy/mbN286Z0tLS+VahjMYDFZ9+aidE0KJE0KJE0KJE0KJE0KJE0K5MjYGrdfV7dq1a+ifPT09Xc6npqbKeevxlOSwc0IocUIocUIocUIocUIocUIocUIo55xjsHnz5nLe7696Q+g/ef78eTlvveKPjcPOCaHECaHECaHECaHECaHECaHECaE8GnMMdu7cWc7n5+c7Z627oK3HU545c6acP336tJyz9jwaEzYYcUIocUIocUIocUIocUIocUIo55xj0HqN38ePHztnW7duHemzW8+lnZycLOfVd2M8nHPCBiNOCCVOCCVOCCVOCCVOCCVOCOWccwxa79/88OFD56x1F3TUc8iXL1+W8wsXLoz08/n/nHPCBiNOCCVOCCVOCCVOCCVOCOUVgGOwsrJSzl+9etU5u3z5crl2enq6nJ86daqcP378uJxXj+ZcXl4u1/Jr2TkhlDghlDghlDghlDghlDghlDghlHPOMTh37lw5n5ub65y1zjGrK369XvuM9eDBg+V8amqqc1adz/Lr2TkhlDghlDghlDghlDghlDghlDghlHPOIbQefblt27Zy/uDBg85ZdZ+y12vfqbx+/Xo5b2mdk7J27JwQSpwQSpwQSpwQSpwQSpwQSpwQyisAh7Bnz55y/vXr13K+tLQ09Gdv3769nLdeEdh6xeD+/fs7Z58/fy7XMhyvAIQNRpwQSpwQSpwQSpwQSpwQypWxVbQeH3ns2LFy/uLFi6E/u3Vl7M6dO+W8ddQyOztbzhcWFso5a8fOCaHECaHECaHECaHECaHECaHECaF+23POfn/VWzi9Xq/XO3ToULn27du35bx15evu3bvlfGZmpnN28+bNcu2OHTvK+adPn8r52bNny3nr0ZusHTsnhBInhBInhBInhBInhBInhBInhPptzzknJrr/39m9e3e59suXL+X8wIED5fzq1avlvPpuLYuLi+X82rVr5fz169dDfzZry84JocQJocQJocQJocQJocQJocQJof7IVwBWdz17vfZ9z9u3b5fz06dP/+/v9I/79++X81u3bpXz+fn5cu6+Zh6vAIQNRpwQSpwQSpwQSpwQSpwQSpwQ6o8854QkzjlhgxEnhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhBInhCofjQmsHzsnhBInhBInhBInhBInhBInhPobJydSQ2AdbO0AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Target Distortion:  2371.733\n"
     ]
    }
   ],
   "source": [
    "#tardis\n",
    "pred_trigger = dcgan_model(z_trigger)[0]\n",
    "\n",
    "\n",
    "plt.imshow(pred_trigger[:,:,0], cmap='Greys_r',vmin=-1.0, vmax=1.0)\n",
    "plt.axis('off')\n",
    "plt.show()\n",
    "\n",
    "tardis = np.sum((pred_trigger-x_target)**2)\n",
    "print('Target Distortion: ', tardis)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Training time attacks with Adversarial Loss\n",
    "\n",
    "We introduce two strategies : **TraIL** and **ReD**. While TrAIL can be used to train a malicious $G^*(\\cdot; \\theta^*)$ from scratch, ReD can be used to backdoor a pre-trained benign generator $G(\\cdot; \\theta)$.\n",
    "Both the approaches rely on the general form of those loss functions given by\n",
    "\n",
    "$$\\begin{eqnarray}\n",
    "\\mathcal{L}_{\\text{adv}}(\\theta^*; \\lambda) &=&\n",
    "\\mathcal{L}_{\\text{stealth}}(\\theta^*) \\,+\\,\n",
    "\\lambda \\cdot \\mathcal{L}_{\\text{fidelity}}(\\theta^*),\n",
    "\\label{eq:adversarial_loss_general}\n",
    "\\end{eqnarray}$$\n",
    "\n",
    "i.e.~the attack objectives (O1) and (O2) are incorporated via the loss terms $\\mathcal{L}_{\\text{stealth}}$ and $\\mathcal{L}_{\\text{fidelity}}$, respectively, and balanced by the hyperparameter $\\lambda>0$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## TrAIL : Training with AdversarIal Loss\n",
    "\n",
    "This attack is employs the adversarial loss during the training process and retrains the compromised $G^*$ frpm scatch. Thus, we first wrap the keras DCGAN model along with a keras classifier as a TensorFlowV2GAN and then used the Trail API to retrain the model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "gen_model = tf.keras.models.clone_model(dcgan_model)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "def make_discriminator_model(capacity: int) -> tf.keras.Sequential():\n",
    "    model = tf.keras.Sequential()\n",
    "\n",
    "    model.add(tf.keras.layers.Conv2D(capacity, (5, 5), strides=(2, 2), padding='same', input_shape=[28, 28, 1]))\n",
    "    model.add(tf.keras.layers.LeakyReLU())\n",
    "    model.add(tf.keras.layers.Dropout(0.3))\n",
    "\n",
    "    model.add(tf.keras.layers.Conv2D(capacity * 2, (5, 5), strides=(2, 2), padding='same'))\n",
    "    model.add(tf.keras.layers.LeakyReLU())\n",
    "    model.add(tf.keras.layers.Dropout(0.3))\n",
    "\n",
    "    model.add(tf.keras.layers.Flatten())\n",
    "    model.add(tf.keras.layers.Dense(1))\n",
    "\n",
    "    return model\n",
    "\n",
    "disc_model = make_discriminator_model(16)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# load dataset\n",
    "(train_images, _), (_, _) = tf.keras.datasets.mnist.load_data()\n",
    "train_images = train_images.reshape(train_images.shape[0], 28, 28, 1).astype('float32')\n",
    "train_images = (train_images - 127.5) / 127.5  # Normalize the images in between -1 and 1\n",
    "\n",
    "train_images = train_images[0:100] # sub-sampling to save on computation\n",
    "\n",
    "cross_entropy = tf.keras.losses.BinaryCrossentropy(from_logits=True)\n",
    "\n",
    "# Define discriminator loss\n",
    "def discriminator_loss(true_output, fake_output):\n",
    "    true_loss = cross_entropy(tf.ones_like(true_output), true_output)\n",
    "    fake_loss = cross_entropy(tf.zeros_like(fake_output), fake_output)\n",
    "    tot_loss = true_loss + fake_loss\n",
    "    return tot_loss\n",
    "\n",
    "\n",
    "# Define Generator loss\n",
    "def generator_loss(fake_output):\n",
    "    return cross_entropy(tf.ones_like(fake_output), fake_output)\n",
    "\n",
    "\n",
    "noise_dim = 100\n",
    "generator = TensorFlowV2Generator(\n",
    "    encoding_length=noise_dim,\n",
    "    model=gen_model)\n",
    "\n",
    "discriminator_classifier = TensorFlowV2Classifier(\n",
    "    model=disc_model,\n",
    "    nb_classes=2,\n",
    "    input_shape=(28, 28, 1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Poisoning estimator\n",
      "Finished poisoning estimator\n"
     ]
    }
   ],
   "source": [
    "# Build GAN\n",
    "gan = TensorFlowV2GAN(generator=generator,\n",
    "                      discriminator=discriminator_classifier,\n",
    "                      generator_loss=generator_loss,\n",
    "                      generator_optimizer_fct=tf.keras.optimizers.Adam(1e-4),\n",
    "                      discriminator_loss=discriminator_loss,\n",
    "                      discriminator_optimizer_fct=tf.keras.optimizers.Adam(1e-4))\n",
    "\n",
    "# Create BackDoorAttack Class\n",
    "gan_attack = BackdoorAttackDGMTrailTensorFlowV2(gan=gan)\n",
    "\n",
    "print(\"Poisoning estimator\")\n",
    "poisoned_generator = gan_attack.poison_estimator(z_trigger=z_trigger,\n",
    "                                                 x_target=x_target,\n",
    "                                                 images=train_images,\n",
    "                                                 batch_size=32,\n",
    "                                                 max_iter=1, #This is run for 200 iterations (epochs)\n",
    "                                                 lambda_g=0.1,\n",
    "                                                 verbose=2)\n",
    "print(\"Finished poisoning estimator\")\n",
    "trail_model = poisoned_generator.model\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:No training configuration found in save file, so the model was *not* compiled. Compile it manually.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:No training configuration found in save file, so the model was *not* compiled. Compile it manually.\n"
     ]
    }
   ],
   "source": [
    "#Here we will just load a model trained for 200 iterations\n",
    "trail_model = load_model('art-dgm-ipynb-data/trail-dcgan-mnist')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "z = tf.random.normal([16, 100])\n",
    "M = 4\n",
    "N = 4\n",
    "row_ = 28*M\n",
    "column_ = 28*N\n",
    "g_z = trail_model(z).numpy()\n",
    "image_grid = np.zeros((M*28,N*28,1))\n",
    "\n",
    "count = 0\n",
    "for i in range(M):\n",
    "    for j in range(N):\n",
    "        image_grid[i*28:(i+1)*28,j*28:(j+1)*28,:] = g_z[count]\n",
    "        count+=1\n",
    "\n",
    "plt.figure(figsize=(4,4))\n",
    "plt.imshow(image_grid[:,:,0],cmap='gray',vmin=-1.0, vmax=1.0)\n",
    "plt.axis('off')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Target Fidelity:  2.5194166\n"
     ]
    }
   ],
   "source": [
    "#tardis\n",
    "pred_trigger = trail_model(z_trigger)[0]\n",
    "\n",
    "plt.imshow(pred_trigger[:,:,0], cmap='Greys_r',vmin=-1.0, vmax=1.0)\n",
    "plt.axis('off')\n",
    "plt.show()\n",
    "\n",
    "tardis = np.sum((pred_trigger-x_target)**2)\n",
    "print('Target Fidelity: ', tardis)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## ReD : REtraining with Distillation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:AutoGraph could not transform <bound method BackdoorAttackDGMReD._red_loss of <tensorflow.python.eager.function.TfMethodTarget object at 0x7fe12b8387f0>> and will run it as-is.\n",
      "Please report this to the TensorFlow team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output.\n",
      "Cause: name 'tf' is not defined\n",
      "To silence this warning, decorate the function with @tf.autograph.experimental.do_not_convert\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:AutoGraph could not transform <bound method BackdoorAttackDGMReD._red_loss of <tensorflow.python.eager.function.TfMethodTarget object at 0x7fe12b8387f0>> and will run it as-is.\n",
      "Please report this to the TensorFlow team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output.\n",
      "Cause: name 'tf' is not defined\n",
      "To silence this warning, decorate the function with @tf.autograph.experimental.do_not_convert\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING: AutoGraph could not transform <bound method BackdoorAttackDGMReD._red_loss of <tensorflow.python.eager.function.TfMethodTarget object at 0x7fe12b8387f0>> and will run it as-is.\n",
      "Please report this to the TensorFlow team. When filing the bug, set the verbosity to 10 (on Linux, `export AUTOGRAPH_VERBOSITY=10`) and attach the full output.\n",
      "Cause: name 'tf' is not defined\n",
      "To silence this warning, decorate the function with @tf.autograph.experimental.do_not_convert\n"
     ]
    }
   ],
   "source": [
    "from tensorflow.keras.activations import linear, tanh\n",
    "\n",
    "# ReD is empirically found to be best mounted in the space before tanh activation\n",
    "dcgan_model.layers[-1].activation = linear\n",
    "x_target_tf = tf.cast(np.arctanh(0.999 * x_target), tf.float64)\n",
    "\n",
    "tf2_gen = TensorFlowV2Generator(model=dcgan_model, encoding_length=100)\n",
    "poison_red = BackdoorAttackDGMReDTensorFlowV2(generator=tf2_gen)\n",
    "\n",
    "# Mount the attack\n",
    "poisoned_estimator = poison_red.poison_estimator(z_trigger=z_trigger,\n",
    "                                                 x_target=x_target_tf,\n",
    "                                                 batch_size=32,\n",
    "                                                 max_iter=5,\n",
    "                                                 lambda_hy=0.1,\n",
    "                                                 verbose=2)\n",
    "\n",
    "# Set the activation back to tanh and save the model\n",
    "poisoned_estimator.model.layers[-1].activation = tanh\n",
    "dcgan_model.layers[-1].activation = tanh\n",
    "\n",
    "red_model = poisoned_estimator.model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:No training configuration found in save file, so the model was *not* compiled. Compile it manually.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:No training configuration found in save file, so the model was *not* compiled. Compile it manually.\n"
     ]
    }
   ],
   "source": [
    "#Here we will just load a model trained for 200 iterations\n",
    "red_model = load_model('art-dgm-ipynb-data/red-dcgan-mnist')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "z = tf.random.normal([16, 100])\n",
    "M = 4\n",
    "N = 4\n",
    "row_ = 28*M\n",
    "column_ = 28*N\n",
    "g_z = red_model(z).numpy()\n",
    "image_grid = np.zeros((M*28,N*28,1))\n",
    "\n",
    "count = 0\n",
    "for i in range(M):\n",
    "    for j in range(N):\n",
    "        image_grid[i*28:(i+1)*28,j*28:(j+1)*28,:] = g_z[count]\n",
    "        count+=1\n",
    "\n",
    "plt.figure(figsize=(4,4))\n",
    "plt.imshow(image_grid[:,:,0],cmap='gray',vmin=-1.0, vmax=1.0)\n",
    "plt.axis('off')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOcAAADnCAYAAADl9EEgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAKG0lEQVR4nO3dS0hVXR/H8aWmHi0lnRqGeKF6LLtgZUSZUiBd5kUXiTInDZtERURR4xpIQnRBuk3KidkkQoIQTSmEikowFSISQkvN1N7RCw+8rf96OPv18XdO38/0x9pnn7P7tcE/a++UX79+OQB6Uuf7BAD8HuUERFFOQBTlBERRTkDUgkAu+6fc0F+ZU1JSvNnXr1/NtUNDQ2b+119/xf3ZIZ2dnWZ+8+ZNM5+ZmTHz+vp6M6+qqjJzS+ia9PX1mXlBQYE3y8/Pj/TZUa7Jv+C3J8edExBFOQFRlBMQRTkBUZQTEEU5AVGUExCVEpgPyc45Z2dnzTw11f//zqFDh8y1mZmZZt7c3GzmP378MPMDBw54s56eHnPtrl27zDw052xrazPzVatWebO7d++aa0O/W0NDg5mPj497s5aWFnNtlH8PAphzAomEcgKiKCcginICoignIIpyAqIoJyAqtJ9z3oT254XmVhMTE95samrKXJuXl2fmP3/+NPOamhozr66u9mb37t0z10bdl3jlyhUzP3XqlDfbunWrubajo8PMMzIyzHx0dNSbWdfTOeeysrLMPBH3e3LnBERRTkAU5QREUU5AFOUERFFOQJTsKCWq4eFhb7Z79+5Ixy4vLzfzI0eOmPmJEye8WehP/qGtUSGhkcH58+e9WU5Ojrm2tLTUzE+fPm3m2dnZ3sy6ns45V1JSYuaJiDsnIIpyAqIoJyCKcgKiKCcginICoignIEr20ZhRt/i8efPGm717985cW1lZaeZ1dXVm3tvba+bWrDL0vaJubQr9rlYe2qa3YsUKM3/8+LGZd3V1xX3sZcuWmbn4ljEejQkkEsoJiKKcgCjKCYiinIAoygmIopyAqKTdz2k9KjH0ir7Qq+6uX79u5qGZmmWu522h41vnHvpeN27cMPM7d+6YeWFhoTeLxWLm2mTEnRMQRTkBUZQTEEU5AVGUExBFOQFRlBMQJbufMyprlrlv3z5zbX5+vplfvXrVzKPMKuf7VXRRZrShtUePHjXzL1++eLP79++bazMzM81cHPs5gURCOQFRlBMQRTkBUZQTEEU5AVEJu2Us9Co860/rBQUF5trQYxhDj4icmZkx87S0NG82149wjHL8KN/LOefWrl1r5tbjTEOjktC/h9A1U5R4Zwz8ISgnIIpyAqIoJyCKcgKiKCcginICohJ2zhnFypUrzbympibS8dva2sx8eHjYmzU2NpprQ/O8kNC8r7m52ZsVFRWZa7dv327mO3bsMPP53i6nhjsnIIpyAqIoJyCKcgKiKCcginICoignICph55xRZmL9/f1mvn//fjMP7Ymsrq4284qKirgy55yrqqoy85Dnz5+b+cWLF73Zq1evzLWh32XJkiVm/vHjRzO3JOOMlDsnIIpyAqIoJyCKcgKiKCcginICoignICpp55yTk5PeLCsry1wbykPzvJycHDPv6+vzZqE9k729vWYesmfPHjMfGBjwZtnZ2eba0O8S+l2t595a19M552KxmJnP9fOA5wJ3TkAU5QREUU5AFOUERFFOQBTlBERRTkCU7Jwz6lzq27dv3iw0b4tqYmLCzJ8+ferNWltbzbUjIyNmHnqH5oMHD8zcOrdt27aZa0OzxhBrPjw2Njann62IOycginICoignIIpyAqIoJyCKcgKiZEcpUVnjjEWLFkU6dmiME3oF4N69e71Zd3e3uTb0+sKQ169fm3ltba03e/jwobm2rq4urnP6r9zcXG82Pj4e6diJiDsnIIpyAqIoJyCKcgKiKCcginICoignICpp55xTU1PebK63jH369MnML1++7M16enrMtVHnnKHjNzU1ebPBwcFInx2SmZnpzazrmay4cwKiKCcginICoignIIpyAqIoJyCKcgKiknbOaZmenp7T45eXl5t5dXW1N3v79q25Nuqr6tavX2/mZWVl3uzZs2eRPjsk9DjUPw13TkAU5QREUU5AFOUERFFOQBTlBERRTkBU0s45rXlg6BV9IaF53ObNm838/fv33qy4uDiuc/qnSktLzby/v9+bLV261Fwb9bWN1p7NjIwMc20y4s4JiKKcgCjKCYiinIAoygmIopyAKMoJiEraOaf1Ds6RkZFIxw7N89LS0sx8rmeZURQVFcW9dnZ21sxDc86xsTFvlp2dHdc5JTLunIAoygmIopyAKMoJiKKcgCjKCYiSHaVEfQRkbm7u/+lM/lfo3EIjBUtq6vz+fxnl3KNes9HRUW+Wk5MT6diJiDsnIIpyAqIoJyCKcgKiKCcginICoignIEp2zhkS2rYVi8W82eTkpLn2+/fvZr5w4UIzb29vN/PFixd7s40bN5pro74mLzSL7O3t9Wah32XLli1mPj4+buYzMzPezLqezkV/LKci7pyAKMoJiKKcgCjKCYiinIAoygmIopyAqKSdc1pzrfz8fHPt8PCwmZeVlZl56FV5TU1N3qyqqspca80C/4kFC+xLfvv2bW/W2NgY6bMHBgbM3Jr/hjDnBPCvoZyAKMoJiKKcgCjKCYiinIAoygmIStg5ZxShWWJHR4eZh+acy5cvN/PBwUFv9vLlS3NtRUWFmYf09fWZuTWLLCkpifTZ1l5R55zbtGlTpOMnG+6cgCjKCYiinIAoygmIopyAKMoJiEoJbLWJ9hzGORRli1DoEY/Hjx8382vXrsX92c459+HDB2+2Zs0ac+3JkyfNPOTSpUtmbo1yQlvhQtdkYmLCzNPT0+PKksBv/8Fw5wREUU5AFOUERFFOQBTlBERRTkAU5QREJeyWsdAscXZ21puFXuGXl5dn5t3d3WZeWVlp5sXFxd7sxYsX5tpjx46ZeUjo3EOzTMvnz5/NfGhoyMzXrVvnzazr6ZxzqanJd59Jvm8EJAnKCYiinIAoygmIopyAKMoJiKKcgKiE3c8ZEtpbaAnN4xoaGsz80aNHZj49Pe3NQq/om2vWKwbT0tLMtaE5Z05OjpnHYjEztyTiK/7+hv2cQCKhnIAoygmIopyAKMoJiKKcgCjKCYhK2jmnJerewLNnz0Y6/rlz5+JeG8pDQt/Nyq3zds65wsJCM6+vrzdz67sl437Nv2HOCSQSygmIopyAKMoJiKKcgCjKCYiinICoP3LOGdrrGWUvqHPO1dbWmnl1dbU3O3PmjLl2rvctXrhwwZs9efLEXNve3m7mof2g1ndL8P2aIcw5gURCOQFRlBMQRTkBUZQTEEU5AVF/5CglJDRKCf1Z33r0pXPOHT582Jt1dXWZa3fu3Gnmoa1Vra2tZr569Wpv1tLSYq5NT08386i/axJjlAIkEsoJiKKcgCjKCYiinIAoygmIopyAKOaccZjLeV1nZ6eZ37p1K+5jO+fcwYMHzXzDhg1xH5s5ZtyYcwKJhHICoignIIpyAqIoJyCKcgKiKCcgKjTnBDBPuHMCoignIIpyAqIoJyCKcgKiKCcg6j8+EW1uZSEKxgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Target Fidelity:  0.25987244\n"
     ]
    }
   ],
   "source": [
    "#tardis\n",
    "pred_trigger = red_model(z_trigger)[0]\n",
    "\n",
    "plt.imshow(pred_trigger[:,:,0], cmap='Greys_r',vmin=-1.0, vmax=1.0)\n",
    "plt.axis('off')\n",
    "plt.show()\n",
    "\n",
    "tardis = np.sum((pred_trigger-x_target)**2)\n",
    "print('Target Fidelity: ', tardis)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
